Page({
  data: {
    radio: '', // 选中的套餐id
    packages: [], // 接口返回的套餐列表
    totalPrice: 0, // 选中套餐的折扣价
    hasAutoRenew: false, // 是否有自动续费套餐
    // 用户信息相关字段
    userInfo: {
      username: '加载中...',
      avatar: '/images/avatar.png',
      desc: '加入会员享受更多权益'
    },
    // 支付相关字段
    showPayPopup: false,
    payAmount: 0,
    payMethod: '微信支付',
    password: '',
    maxPasswordLength: 6,
    // 会员持续时间
    duration: 30,
    isVip:0,
    //分数
    points:0,
    //积分规则：
    pointRule:{}
  },

  onLoad(options) {
    // 页面加载时检查Token和用户信息，再获取数据
    this.checkTokenAndLoadData();
    this.setData({
      points:options.points
    })
    this.getPointType()
  },

  // 检查Token和用户ID是否存在，不存在则跳转登录
  checkTokenAndLoadData() {
    const token = wx.getStorageSync('token');
    const userInfo = wx.getStorageSync('userInfo');
    const userId = userInfo ? userInfo.id : null;
    
    if (!token) {
      wx.showToast({
        title: '请先登录',
        icon: 'none',
        duration: 1500,
        success: () => {
          setTimeout(() => {
            wx.navigateTo({ url: '/pages/login/login' });
          }, 1500);
        }
      });
      return;
    }
    
    if (!userId) {
      wx.showToast({
        title: '用户信息缺失，请重新登录',
        icon: 'none',
        duration: 1500,
        success: () => {
          setTimeout(() => {
            wx.navigateTo({ url: '/pages/login/login' });
          }, 1500);
        }
      });
      return;
    }
    
    // 两者均有效，请求数据
    this.getUserInfo(token, userId);
    this.getPackageList(token);
  },

  // 请求用户信息接口
  getUserInfo(token, userId) {
    wx.request({
      url: `http://localhost:8080/userr/users/${userId}`,
      method: 'GET',
      header: {
        'content-type': 'application/json',
        'Authorization': `Bearer ${token}`
      },
      success: (res) => {
        console.log('用户信息接口返回数据：', res);

        if ([200, 0].includes(res.data.code) && res.data.data) {
          const userData = res.data.data;
          this.setData({
            userInfo: {
              username: userData.nickname || '用户',
              avatar: userData.avatarUrl ? `https://gzq123.oss-cn-beijing.aliyuncs.com/${userData.avatarUrl}` : '/images/avatar.png',
              desc: userData.isVip === 1 ? 
                `VIP会员（有效期至${userData.vipExpireTime}）` : 
                '加入会员享受更多权益'
            }
          });
        } else {
          wx.showToast({
            title: res.data.msg || '用户信息加载失败',
            icon: 'none',
            duration: 1500
          });
        }
      },
      fail: (err) => {
        console.error('用户信息接口请求失败：', err);
        wx.showToast({
          title: '用户信息加载失败',
          icon: 'none',
          duration: 1500
        });
      }
    });
  },

  // 请求套餐接口
  getPackageList(token) {
    wx.showLoading({ title: '加载套餐中...' });
    wx.request({
      url: 'http://localhost:8080/userr/plans/list',
      method: 'GET',
      header: {
        'content-type': 'application/json',
        'Authorization': `Bearer ${token}`
      },
      success: (res) => {
        wx.hideLoading();
        console.log('套餐接口返回数据：', res);

        if (res.data.code === 401) {
          wx.removeStorageSync('token');
          wx.removeStorageSync('userInfo');
          wx.showToast({
            title: '登录已过期，请重新登录',
            icon: 'none',
            duration: 1500,
            success: () => {
              setTimeout(() => {
                wx.navigateTo({ url: '/pages/login/login' });
              }, 1500);
            }
          });
          return;
        }

        if ([200, 0].includes(res.data.code) && res.data.rows && res.data.rows.length > 0) {
          let packages = res.data.rows;
          // 预处理折扣率
          packages = packages.map(item => {
            const discountRate = (item.discountPrice / item.price * 10).toFixed(1);
            return { ...item, discountRate };
          });
          const hasAutoRenew = packages.some(item => item.isAutoRenew === 1);
          const defaultPackage = packages[0];
          this.setData({
            packages,
            radio: defaultPackage.id,
            totalPrice: defaultPackage.discountPrice,
            payAmount: defaultPackage.discountPrice,
            hasAutoRenew
          });
          console.log('套餐数据加载成功');
        } else {
          const errorMsg = res.data.msg || '套餐数据为空';
          wx.showToast({ title: errorMsg, icon: 'none', duration: 3000 });
        }
      },
      fail: (err) => {
        wx.hideLoading();
        wx.showToast({ title: '网络错误，请稍后重试', icon: 'none' });
        console.error('套餐接口请求失败：', err);
      }
    });
  },

  // 套餐选择逻辑
  handlePackageChange(selectedId) {
    const selectedPackage = this.data.packages.find(item => item.id === selectedId);
    if (selectedPackage) {
      this.setData({
        radio: selectedId,
        totalPrice: selectedPackage.discountPrice,
        payAmount: selectedPackage.discountPrice
      });
    }
  },

  handlePackageTap(e) {
    const selectedId = e.currentTarget.dataset.id;
    this.handlePackageChange(selectedId);
    this.setData({
      duration: e.currentTarget.dataset.duration
    });
    console.log('持续时间', e.currentTarget.dataset.duration);
  },

  onRadioChange(e) {
    const selectedId = e.detail;
    this.handlePackageChange(selectedId);
  },

  // 会员协议
  openAgreement() {
    wx.showToast({ title: '查看会员协议', icon: 'none' });
  },

  // 支付相关
  onConfirmPay() {
    // 1. 收集接口所需参数
    const userInfo = wx.getStorageSync('userInfo');
    const userId = userInfo ? userInfo.id : null;
    const selectedPackage = this.data.packages.find(item => item.id === this.data.radio);
    if (!userId || !selectedPackage) {
      wx.showToast({ title: '参数缺失，请重试', icon: 'none' });
      return;
    }

    const params = {
      userId: userId.toString(), // 转为字符串，匹配接口示例格式
      planId: this.data.radio.toString(), // 转为字符串，匹配接口示例格式
      orderNo: this.generateOrderNo(), // 前端生成订单号
      payAmount: this.data.payAmount, // 支付金额
      payChannel: this.data.payMethod === '微信支付' ? 1 : 2, // 1=微信支付（按后端约定调整）
      payStatus: 1, // 支付成功状态
      startTime: this.formatDate(new Date(), 0), // 会员开始时间（当前日期）
      isAutoRenew: selectedPackage.isAutoRenew // 自动续费状态（取自选中套餐）
    };

    let endTime;
    const durationTime = this.data.duration;
    if (durationTime == 30) {
      endTime = this.formatDate(new Date(), 1);
    } else if (durationTime == 90) {
      endTime = this.formatDate(new Date(), 3);
    } else if (durationTime == 180) {
      endTime = this.formatDate(new Date(), 6);
    }
    console.log("结束时间", endTime);
    console.log("持续时间", durationTime);
    const newParam = {
      ...params,
      endTime: endTime
    };

    console.log('新的参数', newParam);
    // 2. 发起新增订单接口请求
    const token = wx.getStorageSync('token');
    wx.showLoading({ title: '提交订单中...' });
    wx.request({
      url: 'http://localhost:8080/userr/orders', // 新增订单接口地址
      method: 'POST',
      header: {
        'content-type': 'application/json',
        'Authorization': `Bearer ${token}` // 携带Token认证
      },
      data: newParam,
      success: (res) => {
        wx.hideLoading();
        // 3. 处理接口响应
        if ([200, 0].includes(res.data.code)) {
          wx.showToast({ title: '支付成功，订单已创建', icon: 'success' });
          
          // 🌟 订单成功后调用新增积分接口（核心新增逻辑）
          // 假设积分值为10（可根据套餐设置动态值，如selectedPackage.point）
          this.addUserPoints(userId, 10);

          // 重置状态并跳转至“我的”页面
          this.setData({ password: '', showPayPopup: false });
          setTimeout(() => {
            wx.switchTab({ url: '/pages/mine/mine' });
          }, 1500);
        } else {
          wx.showToast({
            title: res.data.msg || '订单创建失败',
            icon: 'none',
            duration: 2000
          });
        }
      },
      fail: (err) => {
        wx.hideLoading();
        console.error('新增订单接口请求失败：', err);
        wx.showToast({ title: '网络错误，订单提交失败', icon: 'none' });
      }
    });
    console.log(parseInt(this.data.points)+this.data.pointRule.pointChange);
    console.log("新增",this.data.pointRule.pointChange);
    wx.request({
      url: 'http://localhost:8080/userr/flow',
      method:"POST",
      header: {
        'content-type': 'application/json',
        'Authorization': `Bearer ${token}` // 携带Token认证
      },
      data:{
        userId:wx.getStorageSync('userInfo').id,
        ruleId:3,
        point:this.data.pointRule.pointChange,
        balance:parseInt(this.data.points)+this.data.pointRule.pointChange
      }
    })
    if (!this.data.totalPrice) {
      wx.showToast({ title: '请先选择套餐', icon: 'none' });
      return;
    }
    this.setData({ showPayPopup: true });
  },

  // 🌟 新增：调用积分接口（ruleId=3）
  addUserPoints(userId, point) {
    const token = wx.getStorageSync('token');
    wx.request({
      url: 'http://localhost:8080/userr/flow', // 积分接口地址（按实际接口调整）
      method: 'POST', // 假设为POST请求，按实际接口调整
      header: {
        'content-type': 'application/json',
        'Authorization': `Bearer ${token}` // 携带认证Token
      },
      data: {
        userId: userId.toString(), // 用户ID
        ruleId: 3, // 固定ruleId=3
        point: point, // 新增积分值（此处为10，可动态调整）
        // 若接口需要其他字段（如balance），可补充：
        // balance: 10（示例值，按实际业务计算）
      },
      success: (res) => {
        console.log('积分接口返回结果：', res);
        // 积分添加失败时提示（不阻断订单流程）
        if (![200, 0].includes(res.data.code)) {
          wx.showToast({
            title: '积分已发放，可在"我的"查看', // 成功提示（按实际场景调整）
            icon: 'none',
            duration: 2000
          });
        }
      },
      fail: (err) => {
        console.error('积分接口请求失败：', err);
        wx.showToast({
          title: '积分添加中，稍后可查看', // 失败友好提示
          icon: 'none',
          duration: 2000
        });
      }
    });
  },

  // 时间增加
  addMonths(date, monthsToAdd) {
    const result = new Date(date);
    result.setMonth(result.getMonth() + monthsToAdd);
    return result;
  },


  //获取到积分类型
  getPointType(){
    const token = wx.getStorageSync('token');
    wx.request({
      url: `http://localhost:8080/point/rule/3`,
      method:'GET',
      header: {
        'content-type': 'application/json',
        'Authorization': `Bearer ${token}` // 携带认证Token
      },
      success:(resp)=>{
        if(resp.data.code==200){
          this.setData({
            pointRule:resp.data.data
          })
        }
      }
    })
    
  },

  onClosePayPopup() {
    this.setData({ showPayPopup: false, password: '' });
  },

  onKeyboardInput(value) {
    if (this.data.password.length < this.data.maxPasswordLength) {
      this.setData({ password: this.data.password + value });
      if (this.data.password.length === this.data.maxPasswordLength) {
        this.onKeyboardConfirm();
      }
    }
  },

  // 生成订单编号：时间戳+3位随机数（确保唯一性）
  generateOrderNo() {
    const timestamp = new Date().getTime();
    const random = Math.floor(Math.random() * 1000).toString().padStart(3, '0');
    return `ORDER${timestamp}${random}`;
  },

  // 日期格式化工具（YYYY-MM-DD）
  formatDate(date, monthOffset) {
    // 1. 复制原日期，避免修改原对象
    const targetDate = new Date(date.getTime());
    // 2. 增加指定月份
    targetDate.setMonth(targetDate.getMonth() + monthOffset);
    // 3. 提取年/月/日并补零
    const year = targetDate.getFullYear();
    const month = (targetDate.getMonth() + 1).toString().padStart(2, '0');
    const day = targetDate.getDate().toString().padStart(2, '0');
    return `${year}-${month}-${day}`;
  },

  // 支付确认（核心：调用新增订单接口）
  onKeyboardConfirm() {
    if (this.data.password.length !== this.data.maxPasswordLength) {
      wx.showToast({ title: '请输入6位密码', icon: 'none' });
      return;
    }
  },

  onKeyboardDelete() {
    this.setData({ password: this.data.password.slice(0, -1) });
  }
});